Virtual tabs supporting web content suspension

ABSTRACT

A Web application displays Web content in a user interface (UI) tab having multiple associated virtual tabs. The multiple associated virtual tabs can include a visible tab hosting Web content that is currently visible, one or more hidden tabs each hosting Web content that is not currently visible, and optionally one or more empty tabs each hosting no Web content or only primitive Web content. For each hidden tab, the Web content hosted in the hidden tab is suspended, which refers to ceasing execution of instructions in and/or other operations performed by the Web content. For example, audio/video playback is paused, execution of script instructions ceases, and so forth.

RELATED APPLICATIONS

This application claims priority to and is a continuation of U.S. patentapplication Ser. No. 14/043,711 entitled “Virtual Tabs Supporting WebContent Suspension” and filed Oct. 1, 2013, the disclosure of which ishereby incorporated by reference herein in its entirety.

BACKGROUND

As computing technology has advanced, computers have become increasinglyinterconnected. This interconnection allows large amounts of data to beavailable to computers, such as Web pages from numerous Web sites.Having such a large amount of data available is useful, but is notwithout its problems. One such problem is that it can be time consumingto have the Web pages the user desires obtained and displayed. This canlead to a frustrating user experience due to delays in the user beingable to see the Web pages he or she desires.

SUMMARY

This Summary is provided to introduce a selection of concepts in asimplified form that are further described below in the DetailedDescription. This Summary is not intended to identify key features oressential features of the claimed subject matter, nor is it intended tobe used to limit the scope of the claimed subject matter.

In accordance with one or more aspects, first Web content is displayedin a user interface tab of a Web application. A request is received tochange from displaying the first Web content to displaying second Webcontent in the user interface tab. In response to the request, thesecond Web content is displayed in the user interface tab. The first Webcontent is suspended and kept in a first hidden tab corresponding to theuser interface tab.

In accordance with one or more aspects, a first Web page hosted in avisible tab associated with a user interface tab of a Web browser isdisplayed. An empty tab is also generated. A request to change fromdisplaying the first Web page to displaying a second Web page in theuser interface tab is received. In response to the request, the secondWeb page is loaded in the previously generated empty tab. The previouslygenerated empty tab is switched to being the visible tab, and the secondWeb page hosted in the visible tab in the user interface tab isdisplayed.

BRIEF DESCRIPTION OF THE DRAWINGS

The same numbers are used throughout the drawings to reference likefeatures.

FIG. 1 is a block diagram illustrating an example computing deviceimplementing the virtual tabs supporting web content suspension inaccordance with one or more embodiments.

FIG. 2 illustrates an example of a user interface tab and virtual tabsin accordance with one or more embodiments.

FIG. 3 illustrates another example of a user interface tab and virtualtabs in accordance with one or more embodiments.

FIG. 4 illustrates an example of using the multiple virtual tabs whenchanging which Web content is displayed in accordance with one or moreembodiments.

FIG. 5 is a flowchart illustrating an example process for implementingvirtual tabs supporting Web content suspension in accordance with one ormore embodiments.

FIG. 6 is a flowchart illustrating an example process for suspending Webcontent in accordance with one or more embodiments.

FIG. 7 is a flowchart illustrating an example process for determiningwhether to suspend Web content in accordance with one or moreembodiments.

FIG. 8 is a flowchart illustrating an example process for disposing ofWeb content in accordance with one or more embodiments.

FIG. 9 illustrates an example system that includes an example computingdevice that is representative of one or more systems and/or devices thatmay implement the various techniques described herein.

DETAILED DESCRIPTION

Virtual tabs supporting web content suspension are discussed herein. AWeb application displays Web content in a user interface (UI) tab havingmultiple associated virtual tabs. The multiple associated virtual tabscan include a visible tab hosting Web content that is currently visible,one or more hidden tabs each hosting Web content that is not currentlyvisible, and optionally one or more empty tabs each hosting no Webcontent or primitive Web content (e.g., a blank Web page). For eachhidden tab, the Web content hosted in the hidden tab is suspended, whichrefers to ceasing performance of operations and/or actions by the Webcontent. For example, audio/video playback is paused, execution ofscript instructions ceases, and so forth.

The multiple virtual tabs facilitate changing which Web content isdisplayed at any given time, increasing the speed at which such changescan be made. When particular Web content in the visible tab is no longerto be displayed (e.g., due to the user navigating away from the Webcontent), the Web content is suspended and the visible tab becomes ahidden tab. The new Web content to be displayed can be obtained andhosted in a previously generated empty tab, so additional time andresources need not be expended to generate a tab to host the obtainedWeb content. However, if the new Web content to be displayed is alreadyhosted in a hidden tab, then the Web content in the hidden tab isreactivated and the hidden tab becomes the new visible tab.

FIG. 1 is a block diagram illustrating an example computing device 100implementing the virtual tabs supporting web content suspension inaccordance with one or more embodiments. The computing device 100 can bea variety of different types of devices, such as a physical device or avirtual device. For example, the computing device 100 can be a physicaldevice such as a desktop computer, a server computer, a laptop ornetbook computer, a tablet or notepad computer, a mobile station, anentertainment appliance, a set-top box communicatively coupled to adisplay device, a television or other display device, a cellular orother wireless phone, a game console, an automotive computer, and soforth. The computing device 100 can also be a virtual device, such as avirtual machine running on a physical device. A virtual machine can berun on any of a variety of different types of physical devices (e.g.,any of the various types listed above). Thus, the computing device 100may range from full resource devices with substantial memory andprocessor resources (e.g., personal computers, game consoles) tolow-resource devices with limited memory and/or processing resources(e.g., traditional set-top boxes, hand-held game consoles).

The computing device 100 includes a user input module 102, an outputmodule 104, and a web application 106. The user input module 102receives user inputs from a user of the computing device 100. Userinputs can be provided in a variety of different manners, such as bypressing one or more keys of a keypad or keyboard of the device 100,pressing one or more keys of a controller (e.g., remote control device,mouse, track pad, etc.) of the device 100, pressing a particular portionof a touchpad or touchscreen of the device 100, making a particulargesture on a touchpad or touchscreen of the device 100, and/or making aparticular gesture on a controller (e.g., remote control device, mouse,track pad, etc.) of the device 100. User inputs can also be provided viaother physical feedback input to the device 100, such as tapping anyportion of the device 100, an action that can be recognized by a motiondetection or other component of the device 100 (such as shaking thedevice 100, rotating the device 100, bending or flexing the device 100,etc.), and so forth. User inputs can also be provided in other manners,such as via voice or other audible inputs to a microphone, via motionsof hands or other body parts observed by an image capture device, and soforth.

The output module 104 generates, manages, and/or outputs content fordisplay, playback, and/or other presentation. This content can becreated by the output module 104 or obtained from other modules of thecomputing device 100 (e.g., by the Web application 106). This contentcan be, for example, a display or playback portion of a user interface(UI). The content can be displayed or otherwise played back bycomponents of the computing device 100 (e.g., speakers, interactivedisplay devices, etc.). Alternatively, the output module 104 cangenerate one or more signals that are output to other devices orcomponents (e.g., speakers, display devices, etc.) that are separatefrom the computing device 100.

The Web application 106 is an application that displays or otherwisepresents Web content. The Web application 106 can be implemented as aseparate application run by an operating system of the computing device100, or alternatively as at least part of the operating system of thecomputing device 100. Web content refers to various types of electroniccontent that can be displayed or otherwise presented by the computingdevice 100. The Web content is typically written in a markup language,such as eXtensible Markup Language (XML) or HyperText Markup Language(HTML). The Web content can also include content written in otherlanguages, such as JavaScript, Cascading Style Sheets (CSS), and soforth. In one or more embodiments, the Web content is a Web page.

In one or more embodiments, the Web content is one or more Web pages,and the Web application 106 is a Web browser that obtains the Web pagesfrom various Web sites via a network such as the Internet, a local areanetwork (LAN), a public telephone network, an intranet, other publicand/or proprietary networks, combinations thereof, and so forth.Alternatively, the Web application 106 can be other types ofapplications that obtain Web pages or other Web content from Web sitesor other sources, such as audio/video playback applications, electronicbook or magazine readers, and so forth.

Additionally, in one or more embodiments the Web application 106supports virtual tabs associated with a UI tab. A UI tab 110 refers tothe user interface area where Web content is displayed by the Webapplication 106. The Web application 106 can have multiple UI tabs, eachof which can be a particular instance of the Web application 106.Associated with or corresponding to the UI tab 110 is multiple virtualtabs, each of which is a container (e.g., a data structure) that hosts(e.g., stores) Web content. Each virtual tab associated with a UI tab ismaintained in the same type of memory as the Web application 106 (e.g.,Random Access Memory of the computing device 100). Web content hosted byone of the multiple virtual tabs associated with a UI tab can bedisplayed at any given time—Web content hosted by others of the multiplevirtual tabs associated with the UI tab is not displayed. Although Webcontent is discussed herein as being displayed, it should be noted thatWeb content can additionally or alternatively be presented in othermanners, such as being played back audibly.

In one or more embodiments, a single UI tab is displayed by the Webapplication 106 at a time. Alternatively, multiple UI tabs can bedisplayed by the Web application 106 at a time, with multiple virtualtabs being associated with each UI tab. Each UI tab can have its ownseparate set of associated multiple virtual tabs, or alternatively oneor more of the multiple virtual tabs can be associated with noparticular UI tab (also referred to as the one or more virtual tabsbeing associated with multiple UI tabs).

The multiple virtual tabs can be different types of tabs, including avisible tab, a hidden tab, and an empty tab. A visible tab refers to avirtual tab hosting Web content that is currently visible or would bevisible if the Web application 106 were active (e.g., the Web contentthat would be displayed if the Web application 106 were not minimized orcovered by another window). A hidden tab refers to a virtual tab hostingWeb content that is not currently visible. In one or more embodiments,the Web content hosted in a hidden tab is suspended as discussed in moredetail below. An empty tab refers to a virtual tab that that hosts noWeb content or alternatively very simple or primitive Web content (e.g.,Web content that results in no display or less than a threshold amountof data being displayed, such as a blank Web page (a Web page thatincludes no HTML) or a Web page that displays the words “Empty page”).

At any given time, a UI tab can have one associated visible tab, zero ormore associated hidden tabs, and zero or more empty tabs. In the exampleof FIG. 1, associated with the UI tab 110 is a visible tab 112 and ahidden tab 114. An empty tab 116 is also available for use by the UI tab110, and can be associated with the UI tab 110 or alternativelyavailable for use by any of multiple UI tabs.

Web content being suspended refers to ceasing execution of instructionsin the Web content, ceasing performance of operations and/or actions bythe Web content, and so forth. For example, audio/video playback ispaused, execution of script instructions ceases, and so forth. Althoughsuspended, the Web content remains in the same type of memory as the Webapplication 106 (e.g., Random Access Memory of the computing device100). The Web content need not be transformed into or written intoanother format or data structure, need not be transferred to a differenttype of memory (e.g., an optical or magnetic disk), and so forth. Thesuspended Web content remains in memory as if the Web content werehosted by a visible tab, except for the Web content being suspended. TheWeb content can thus be resumed quickly without needing to be read infrom a slower memory or storage device (e.g., a magnetic or solid statedisk). Various actions are taken to suspend Web content as well asresume Web content, as discussed in more detail below.

The Web application 106 includes multiple modules that facilitate usageof the multiple virtual tabs associated with the UI tab 110. Althoughthese modules are illustrated as being part of the Web application 106,it should be noted that one or more of the modules can be implemented byother applications or programs (e.g., by an operating system of thecomputing device 100). These modules include a tab switching module, atab generation module 124, a Web content retrieval module 126, a Webcontent suspension module 128, a Web content reactivation module 130,and a Web content lifetime management module 132.

The tab switching module 122 manages the tabs 112-116, includingswitching which tab is visible, which tab(s) are hidden, and whichtab(s) are empty. The tab generation module 124 creates new tabs112-116. The Web content retrieval module 126 retrieves or otherwiseobtains Web content to be hosted by a tab 112-116. The Web contentsuspension module 128 suspends the Web content hosted by a visible tab112, and the Web content reactivation module 130 resumes or reactivatesthe Web content hosted by a hidden tab 114. The Web content lifetimemanagement module 132 manages how long a hidden tab 114 and/or an emptytab 116 is maintained, as well as when to create a new empty tab 116.

FIG. 2 illustrates an example of a UI tab and virtual tabs in accordancewith one or more embodiments. A presentation area 200 of a Webapplication is illustrated on a display 202. Two different UI tabs 212and 214 are displayed on the display 202 by the Web application, eitherof which can be the active UI tab that is displayed in the presentationarea 200. In one or more embodiments, only one of the UI tabs 212 and214 is the active UI tab that is displayed at any given time.

Each UI tab 212 and 214 has its own associated visible tab and hiddentab, and an empty tab is available for use by either UI tab 212 or 214.However, it should be noted that the visible tab associated with a UItab 212 or 214 is only displayed if the associated UI tab 212 or 214 iscurrently the active UI tab. For the UI tab 212, the associated visibletab 222 includes Web content that is text (illustrated as lines in thevisible tab 222) and that is currently displayed in the presentationarea 200 when the UI tab 212 is the active UI tab. The associated hiddentab 224 includes Web content that is text and a picture (illustrated aslines and a rounded rectangle in the hidden tab 224).

For the UI tab 214, the associated visible tab 232 includes Web contentthat is text (illustrated as lines and a rounded rectangle in thevisible tab 232) and that is currently displayed in the presentationarea 200 when the UI tab 214 is the active UI tab. The associated hiddentab 234 includes Web content that is text and pictures (illustrated aslines and rounded rectangles in the hidden tab 234).

An empty tab 242 includes no Web content, and is available for use byeither UI tab 212 or 214. The empty tab 242 can thus be viewed as beingassociated with no particular UI tab. Alternatively, one or more UI tabscan each have a separate associated empty tab that is available for useby the associated UI tab but not other UI tabs.

Alternatively, both of the UI tabs 212 and 214 can be the active UI tabsconcurrently. In such situations, the visible tabs 222 and 232 are bothdisplayed concurrently (e.g., in different portions of presentation area200).

FIG. 3 illustrates another example of a UI tab and virtual tabs inaccordance with one or more embodiments. A UI tab 300 of a Webapplication is illustrated on a display 302. In FIG. 3, the Webapplication supports a single UI tab or presentation area (rather thanmultiple UI tabs in a presentation area as illustrated in FIG. 2). TheUI tab 300 has an associated visible tab 312, an associated hidden tab314, and an associated empty tab 316. The visible tab 312 includes Webcontent that is text (illustrated as lines in the visible tab 312) andthat is currently displayed in the UI tab 300. The hidden tab 314includes Web content that is text and a picture (illustrated as linesand a rounded rectangle in the hidden tab 314). The empty tab 316includes no Web content.

Returning to FIG. 1, the multiple tabs associated with the UI tab 110are used to increase the speed at which Web content can be displayedwhen changing the Web content that is displayed, allowing the Webcontent to be displayed more quickly.

The tab generation module 124 generates the virtual tabs associated withthe UI tab 110. Generation of a virtual tab can include various actions,such as having memory allocated for the virtual tab, having various datastructures created, having various objects generated and registered withan operating system of the computing device 100, and so forth. The tabgeneration module 124 generates an empty tab, which remains empty untila request to display Web content not already hosted in a hidden tab isreceived. In response to a request to display Web content that is notalready hosted in a hidden tab is received, the Web application 106obtains the Web content from the Web content source, loads the obtainedWeb content in the empty tab (so the Web content is hosted in the emptytab), and makes the empty tab the visible tab. Thus, the Web content canbe displayed more quickly because additional time and resources need notbe expended to generate a tab to host the obtained Web content—the emptytab is already generated.

The Web content retrieval module 126 retrieves or otherwise obtains Webcontent from a Web content source for hosting by a tab 112-116. In oneor more embodiments the Web content is loaded into an empty tab 116,although alternatively the Web content can be loaded into other tabs.Loading Web content into a tab (or loading a tab) refers to storing theWeb content in the tab that hosts the Web content.

The tab switching module 122 determines when to switch which virtual tabis the visible tab, which virtual tab(s) are hidden tabs, and whichvirtual tab(s) are empty tabs. Switching which virtual tabs are visible,hidden, and empty occurs in response to changing which Web content isbeing displayed. The tab switching module 122 notifies the Web contentsuspension module 128 to suspend Web content in a virtual tab that hasbecome a hidden tab, and notifies the Web content reactivation module130 to reactive or resume Web content in a virtual tab that has become avisible tab.

The tab switching module 122 also keeps track of which virtual tab isvisible, which virtual tab(s) are hidden, and which virtual tab(s) areempty. The module 122 can do this in any of a variety of manners, suchas maintaining a list or other record identifying the virtual tabs andfor each virtual tab whether it is visible, hidden or empty.Alternatively, the module 122 can do this in other manners, such as byusing flags or other identifiers in each virtual tab that indicateswhether the virtual tab is visible, hidden, or empty.

It should be noted that the Web application 106 can also unload Webcontent at various times. Unloading Web content from a tab (or unloadinga tab) refers to deleting or otherwise removing the Web content from thetab that was hosting the Web content. The virtual tab that hosted theunloaded Web content can be deleted, in which case the various actionstaken to generate the virtual tab are undone (e.g., memory for thevirtual tab is de-allocated, created data structures are deleted,objects generated and registered with an operating system of thecomputing device 100 are deleted, and so forth). Alternatively, ratherthan deleting the virtual tab, the virtual tab can be switched to beingan empty tab (also referred to as recycling the virtual tab).

FIG. 4 illustrates an example of using the multiple virtual tabs whenchanging which Web content is displayed in accordance with one or moreembodiments. In FIG. 4, assume that a UI tab initially has an associatedvirtual tab 402 that is a visible tab, and a virtual tab 404 is an emptytab available for use. The virtual tab 402 hosts Web content that istext (illustrated as multiple lines) and is referred to as Content A.

A request 406 is received to display Content B in the UI tab. Therequest can be a user request (e.g., to navigate to the Web page thatincludes the Content B such as by using a forward button or gesture of aWeb browser or entering an address of the Web content) or a requestreceived from another module or component. In response to the request todisplay Content B, the Web content that is Content B (illustrated aslines and a rounded rectangle) is loaded into the virtual tab 404, andthe virtual tab 404 is made the visible tab. The virtual tab 402 is madea hidden tab, and Content A is suspended. A virtual tab 408 that is anempty tab is also generated.

A request 410 is subsequently received to display Content A again in thepresentation area. The request can be a user request (e.g., to navigateto the Web page that includes the Content A such as by using a backbutton or gesture of a Web browser or entering an address of the Webcontent) or a request received from another module or component. Inresponse to the request to display Content A, the virtual tab 402 ismade the visible tab, the virtual tab 404 is made a hidden tab, andContent B is suspended.

Thus, as can be seen in FIG. 4, when a request is received that resultsin particular Web content no longer being displayed, that particular Webcontent is suspended and the virtual tab that hosts that particular Webcontent becomes a hidden tab. That particular Web content can then bequickly resumed and the virtual tab that hosts that particular Webcontent can again become the visible tab in response to a request forthe particular Web content to be displayed again. That particular Webcontent can be quickly displayed again due to the virtual tab that hoststhat particular Web content remaining in memory (e.g., Random AccessMemory) rather than needing to be re-obtained from the source of the Webcontent (e.g., from a server via a network) and rather than needing tobe re-loaded from a slower memory or storage device (e.g., a diskdrive).

FIG. 5 is a flowchart illustrating an example process 500 forimplementing virtual tabs supporting Web content suspension inaccordance with one or more embodiments. Process 500 is carried out by aWeb application, such as Web application 106 of FIG. 1, and can beimplemented in software, firmware, hardware, or combinations thereof.Process 500 is shown as a set of acts and is not limited to the ordershown for performing the operations of the various acts. Process 500 isan example process for implementing virtual tabs supporting Web contentsuspension; additional discussions of implementing virtual tabssupporting Web content suspension are included herein with reference todifferent figures.

In process 500, in a user interface tab of a Web application, Webcontent A hosted in a visible tab is displayed (act 502). Web content Acan be any of a variety of different types of Web content, such as a Webpage, as discussed above. The visible tab is a virtual tab associatedwith the user interface tab as discussed above.

An empty tab is also generated (act 504). An empty tab refers to avirtual tab that that hosts no Web content or alternatively primitiveWeb content as discussed above. The empty tab can be associated with theuser interface tab, or alternatively associated with no particular userinterface tab as discussed above.

A request is received to change to displaying Web content B in the userinterface tab (act 506). Web content B can be any of a variety ofdifferent types of Web content, such as a Web page, as discussed above.The request can be received via any of a variety of different userinputs, or from another component or module as discussed above.

A check is made as to whether Web content B is hosted in a hidden tabassociated with the user interface tab (act 508). A hidden tab refers toa virtual tab hosting Web content that is not currently visible asdiscussed above.

If Web content B is not hosted in a hidden tab associated with the userinterface tab, then Web content B is obtained and loaded into thepreviously generated empty tab (act 510). The previously generated emptytab is the empty tab generated in act 504.

The empty tab is switched to being the visible tab associated with theuser interface tab (act 512), and Web content B hosted in the visibletab is displayed in the user interface tab (act 514).

Returning to act 508, if Web content B is hosted in a hidden tabassociated with the user interface tab, then the hidden tab hosting Webcontent B is switched to being the visible tab associated with the userinterface tab (act 516). The Web content B in the hidden tab would havebeen previously suspended, so the Web content B is reactivated orresumed (act 518), and Web content B hosted in the visible tab isdisplayed in the user interface tab (act 514).

A check is also made as to whether Web content A can be suspended (act520). Situations can arise in which Web content A cannot be suspended,such as if a database transaction is not completed within a thresholdamount of time or a plug-in is not able to suspend itself as discussedin more detail below. If the Web content A can be suspended, then theprevious visible tab hosting Web content A is switched to being a hiddentab that is kept in memory (act 522). The hidden tab is kept in, forexample, Random Access Memory as discussed above. The Web content A isalso suspended (act 524).

However, if the Web content A cannot be suspended, then the Web contentA is unloaded (act 526).

Process 500 is discussed with reference to Web content B, if not hostedin a hidden tab associated with the user interface tab, being obtainedand loaded into the previously generated empty tab. Alternatively, theWeb content B can be loaded into a new visible tab without having beenloaded into a previously generated empty tab.

It should be noted that in the discussions herein, reference is made toa hidden tab being associated with a UI tab. Alternatively, in somesituations a hidden tab can be available for use by multiple UI tabs,and thus can be associated with no particular UI tab (also referred toas being associated with multiple UI tabs). For example, situations canarise in which a user accesses different Web content in a first UI tab,and a history record or travel log identifying at least some of the Webcontent that has been accessed is maintained. This Web content can behosted in different hidden tabs associated with the first UI tab. Asecond UI tab can then be opened and the history record or travel logfor the first UI tab copied to the second UI tab. In such situations,the one or more hidden tabs hosting Web content identified in thehistory record or travel log can be shared by (available for use by) thefirst and second UI tabs. If the user were to subsequently access theWeb content hosted in a hidden tab, that hidden tab becomes the visibletab as discussed herein, and is also associated with the UI tab in whichthe Web content is displayed. As the hidden tab has become associatedwith a particular one of the UI tabs, it is no longer available for useby the other UI tab.

Suspending Web Content

Returning to FIG. 1, the Web content suspension module 128 suspends Webcontent, also referred to as suspending the virtual tab that hosts theWeb content. The Web content reactivation module 130 resumes orreactivates the Web content, also referred to as resuming orreactivating the virtual tab that hosts the Web content.

Although the suspension and reactivation of Web content is discussedherein with reference to suspending and reactivating Web content in ahidden tab associated with a UI tab, it should be noted that thesuspension and reactivation of Web content discussed herein can be usedin various different scenarios. For example, in a Web applicationsupporting multiple UI tabs, when one UI tab is not being displayed allof the tabs including Web content for that UI tab (including any visibletab) can be suspended as discussed herein, and when the UI tab is againbeing displayed one or more of the tabs including Web content for thatUI tab (e.g., the visible tab) can be reactivated as discussed herein.By way of another example, if a Web application is minimized orotherwise not displayed on a computing device, the Web content displayedor otherwise presented by the web application can be suspended asdiscussed herein, and when the Web application is again displayed, theWeb content displayed or otherwise presented by the Web application canbe reactivated as discussed herein. By way of yet another example, ifWeb content were to be written to another storage device or memory(possibly being serialized or otherwise transformed prior to or as partof being written), the Web content can be suspended as discussed hereinprior to being written to the other storage device or memory, andreactivated as discussed herein when read back from the other storagedevice or memory.

The Web content can include or implement various different elements, andthese different elements can be suspended and reactivated in differentmanners. It should be noted, however, that Web content can include anycombination of these different elements, and that the Web content neednot include all of these elements.

One element that may be included or implemented in Web content isaudio/video content for playback. The audio/video content is audio/videocontent played back by the Web content (e.g., by HTML instructionsincluded in the Web content), and can be included in or otherwiseidentified by (e.g., linked to) by the Web content. When suspending Webcontent, the Web content suspension module 128 pauses playback of eachaudio and/or video content element in the Web content. In one or moreembodiments, the Web content suspension module 128 enumerates the audioand/or video content elements in the Web content, and iterates throughthose audio and/or video content elements, pausing each audio and/orvideo content element. Thus, when Web content is suspended, videoincluded or identified in the Web content is not played back, and audioincluded or identified in the Web content is not played back.

When reactivating Web content, the Web content reactivation module 130resumes playback of audio and/or video content elements in the Webcontent. In one or more embodiments, the Web content reactivation module130 enumerates the audio and/or video content elements in the Webcontent that were suspended by the Web content suspension module 128,and iterates through those audio and/or video content elements, resumingeach audio and/or video content element. Thus, when Web content isreactivated, video included or identified in the Web content that waspaused when the Web content was suspended resumes being played back, andaudio included or identified in the Web content that was paused when theWeb content was suspended resumes being played back.

It should be noted that, because the playback of the audio and/or videocontent was paused, when the Web content is reactivated the playback ofthe audio and/or video resumes at the location it was at when the Webcontent was suspended. No separate record of the locations that theaudio and/or video playback were at when the Web content was suspendedneed be maintained. Thus, if the user navigates away from particular Webcontent and that particular Web content is suspended, when the usernavigates back to that particular Web content and the Web content isreactivated, the user continues seeing video and/or hearing audio at thesame location the video and/or audio was at when the user navigated awayfrom the particular Web content.

Another element that may be included or implemented in Web content is anasynchronous request. An asynchronous request refers to a request thatis part of an asynchronous operation—the Web content sends a request toanother device or module but does not know when a reply to the requestwill be received. An example of such a request is a HyperText TransferProtocol (HTTP) request, such as an XML HTTP Request (XHR).

When suspending Web content, the Web content may be waiting for a replyto one or more asynchronous requests. The Web content suspension module128 monitors replies received by the Web application 106 that target thesuspended Web content, and holds those replies (e.g., queues thereplies). If the Web content that is the target of a reply is unloadedfrom memory, then the reply is deleted by the Web content suspensionmodule 128. However, if the Web content is reactivated, then whenreactivating the Web content, the Web content reactivation module 130obtains the replies targeting the Web content and provides those repliesto the Web content (e.g., in the order they were received and queued bythe Web content suspension module 128). Thus, when the Web content isresumed, any replies to asynchronous requests are not lost—the Webcontent receives any replies to asynchronous requests that were receivedby the Web application 106 while the Web content was suspended.

Another element that may be included or implemented in Web content is ascript. Web content can include script elements written in any of avariety of different scripting languages, such as JavaScript. Scriptsrequest to be notified by a message pump or message dispatcher of theWeb application 106 when particular events occur. These events can takevarious forms, such as the expiration of a timer, the occurrence of aparticular user input (e.g., mouse click or movement), and so forth.When suspending Web content, the Web content suspension module 128notifies the message pump or message dispatcher to stop providing atleast some messages to the Web application 106.

In one or more embodiments, the Web content suspension module 128 cannotify the message pump or message dispatcher to stop providing allmessages to the Web content. Alternatively, the Web content suspensionmodule 128 can notify the message pump or message dispatcher to stopproviding a subset of messages to the Web content while allowing othermessages to be provided to the Web content. This subset of messages isthe messages that would trigger execution of a script in the Web content(e.g., messages notifying the Web content of events that the script hasrequested to be notified of). By stopping providing the subset ofmessages but not other messages to the Web content, if the script isexecuted in the same thread as other Web content operations, such otherWeb content operations are able to still receive events that they are tobe notified of.

The Web content suspension module 128 notifies the message pump ormessage dispatcher to hold the messages that are not provided to the Webcontent (e.g., queue the messages). If the Web content to which themessages would be provided is unloaded from memory, then the Web contentsuspension module 128 notifies the message pump or message dispatcher todelete the messages. However, if the Web content is reactivated, thenwhen reactivating the Web content, the Web content reactivation module130 notifies the message pump or message dispatcher to provide thosemessages to the Web content (e.g., in the order they occurred and werequeued by the message pump or message dispatcher). Thus, when the Webcontent is resumed, any messages for the script are not lost—the Webcontent receives any messages that would have been provided to the Webcontent had the Web content not been suspended.

Another element that may be included or implemented in Web content is ananimation and/or transition. Web content can include elements that aredeclarative animations or transitions, such as elements written usingCSS or JavaScript. Animations can identify a particular object that isto be animated, such as by moving between two locations over aparticular amount of time, moving in a particular direction or in aparticular manner (e.g., so as to appear spinning) for a particularamount of time (or indefinitely), and so forth. Transitions can identifya particular object that is to change in appearance (e.g., change coloror brightness) over a particular amount of time, or fade away or fade inover a particular amount of time, and so forth.

When suspending Web content, the Web content suspension module 128pauses each animation element and each transition element in the Webcontent. In one or more embodiments, the Web suspension module 128 stopsa master timer that controls the animation and/or transition elements.Alternatively, the Web content suspension module 128 can enumerate theanimation and/or transition elements in the Web content and iteratethrough those elements, pausing each animation and/or transitionelement. Thus, when Web content is suspended, animations and transitionsare not rendered, the Web application 106 does not calculate where theanimation or transition should be next (e.g., the next frame of theanimation or transition to display), and so forth.

When reactivating Web content, the Web content reactivation module 130resumes the master timer that controls the animation and/or transitionelements, or alternatively resumes each animation element and eachtransition element in the Web content that was paused by the Web contentsuspension module 128 when suspending the Web content. In one or moreembodiments, the Web content reactivation module 130 enumerates theanimation and/or transition elements in the Web content, and iteratesthrough those elements, resuming each animation and/or transitionelement. Thus, when Web content is reactivated, animations andtransitions in the Web content resume.

It should be noted that, because the animations and transitions werepaused or the master timer stopped, when the Web content is reactivatedthe animations and transitions resume at the locations they were at whenthe Web content was suspended. No separate record of the locations orstates of the animations or transitions when the Web content wassuspended need be maintained. Thus, if the user navigates away fromparticular Web content and that particular Web content is suspended,when the user navigates back to that particular Web content and the Webcontent is reactivated, the user continues seeing the animations andtransitions at the same location and with the same state as when theuser navigated away from the particular Web content.

Another element that may be included or implemented in Web content is adatabase transaction. Various different types of database transactionscan be performed by Web content, such as Indexed Database (IndexedDB orIndexed DB) transactions. The database transactions can include multiplerequests that are performed by another module or device, such asrequests to add database entries, change database entries removedatabase entries, delete tables, and so forth. The database transactionis deemed to be completed if all the requests included in thetransaction are successfully performed. If one or more requests in thetransaction are not successfully performed then the transaction isdeemed to be not completed (and any requests that were successfullyperformed are rolled back).

In one or more embodiments, when suspending Web content, the Web contentsuspension module 128 delays suspension of the Web content for athreshold amount of time to allow database transactions to be completed.This threshold amount of time can vary, and is selected so that thedelay is not noticeable or is barely noticeable to a user (e.g., so thatif any audio or video were being played back, the delay in suspensionwould be unnoticeable or barely noticeable to a user listening to orwatching the playback). This threshold amount of time can be, forexample, 100 milliseconds, although other values can alternatively beused. If the database transaction is completed within (e.g., in lessthan, or less than or equal to) the threshold amount of time, then theWeb content suspension module 128 suspends the Web content. Whetherdatabase transactions have been completed can be determined in variousmanners, such as notification to the Web application 106 by the Webcontent when the database transaction completes, an indication ofcompletion received from another device (e.g., that performs therequests in the transaction), and so forth. When reactivating Webcontent, the Web content reactivation module 130 need take no specialactions with regard to the database transaction because the databasetransaction completed. However, if the database transaction is notcompleted within the threshold amount of time, then the Web application106 unloads the Web content rather than suspending the Web content.

Alternatively, rather than waiting a threshold amount of time whensuspending Web content, the Web content suspension module 128 can abortany database transactions that are in progress at the time suspension ofthe Web content is to occur. Which database transactions are in progresscan be determined in various manners, such as notification to the Webapplication 106 by the Web content of the database transactions, anindication of database transactions received from another device (e.g.,that performs the requests in the transaction), by monitoringcommunications between the Web content and another device (e.g., thatperforms the requests in the transaction), and so forth. When aborting adatabase transaction, the device that performs the request in thetransaction is notified to rollback (e.g., undo) any requests in thetransaction that were successfully performed, and the Web content isnotified that the database transaction failed. When reactivating the Webcontent, the Web content reactivation module 130 need take no specialactions with regard to the database transaction because the Web contentwas notified that the database transaction failed—the Web content canproceed to perform the database transaction again if desired.

Another element that may be included or implemented in Web content isWeb worker threads. A Web worker thread refers to a thread executed fromthe Web content that executes a script, such as JavaScript. Web contentcan have multiple Web worker threads. When suspending Web content, theWeb content suspension module 128 notifies the message pump or messagedispatcher to stop providing messages to each of the Web worker threadsof the Web content. In one or more embodiments, the Web contentsuspension module 128 enumerates the Web worker threads of the Webcontent, and iterates through those threads, notifying the message pumpor message dispatcher to stop providing messages to each thread. Thus,when Web content is suspended, scripts in Web worker threads do notreceive messages of events.

The Web content suspension module 128 notifies the message pump ormessage dispatcher to hold the messages that are not provided to the Webworker threads of the Web content (e.g., queue the messages). If the Webcontent to which the messages would be provided is unloaded from memory,then the Web content suspension module 128 notifies the message pump ormessage dispatcher to delete the messages. However, if the Web contentis reactivated, then when reactivating the Web content, the Web contentreactivation module 130 notifies the message pump or message dispatcherto provide the queued messages to those Web worker threads Web content(e.g., in the order they occurred and were queued by the message pump ormessage dispatcher). Thus, when the Web content is resumed, any messagesfor the scripts in the Web worker threads are not lost—the Web workerthreads receive any messages that would have been provided to thethreads had the Web content not been suspended.

In one or more embodiments, Web worker threads include only scripts, andthus all the message pump or message dispatcher can stop providing allmessages to all of the Web worker threads of the Web content.Alternatively, if the scripts include additional operations, then themessage pump or message dispatcher can stop providing only a subset ofthe messages to the Web worker threads (e.g., the messages that wouldtrigger execution of a script in the Web content) as discussed above.

Another element that may be included or implemented in Web content is aplug-in. A plug-in refers to a component or module that adds a featureto the Web application 106, although is a separate component or modulefrom the Web application 106. When suspending Web content, the Webcontent suspension module 128 invokes an application programminginterface (API) of the plug-in. The plug-in can implement the API,allowing the Web content suspension module 128 to query the plug-in asto whether the plug-in is able to suspend itself, to request that theplug-in suspend itself, and to request that the plug-in reactivate orresume itself. If the plug-in is able to suspend itself, then the Webcontent suspension module 128 invokes the API of the plug-in, requestingthat the plug-in suspend itself. The module 128 can request that theplug-in suspend itself in response to the plug-in indicating it is ableto suspend itself, or alternatively the request to suspend the plug-incan be included as part of a request to indicate whether the plug-in cansuspend itself. In response to the request from the Web contentsuspension module 128 to suspend itself, the plug-in suspends itself.The manner in which the plug-in suspends itself is up to the plug-initself, but can include various different actions analogous to thosediscussed above, such as pausing audio and/or video playback, stoppinganimations or transitions, and so forth. The manner in which the plug-insuspends itself can also include various other actions, such as reducinga playback rate of video, deactivating particular components (e.g.,cameras), and so forth.

In one or more embodiments, if the plug-in is not able to suspend itself(including situations in which the plug-in does not support an APIallowing the Web content suspension module 128 to request that theplug-in suspend itself), then the Web application 106 unloads the Webcontent rather than suspending the Web content. Alternatively, if theplug-in is not able to suspend itself, then the Web application 106unloads the plug-in and suspends the Web content. The Web contentsuspension module 128 can maintain a record of various references to oridentifiers of the plug-in, such as references to APIs, references tocallback functions, and so forth. When reactivating the Web content, theWeb content reactivation module 130 re-loads the plug-in, and uses therecord of the various references to or identifiers of the plug-in toallow the Web content to resume communication with and interaction withthe plug-in.

Table I illustrates an example of an API referred to as IBFCacheablethat can be implemented by a plug-in to allow the Web content suspensionmodule 128 to request that the plug-in suspend itself. It should benoted that the IBFCacheable API is an example of an API that can beimplemented by a plug-in, and that various other APIs can alternativelybe implemented.

TABLE I interface IBFCacheable : IUnknown {  [ ] HRESULT EnterBFCache();  [ ] HRESULT ExitBFCache( ); };

A plug-in that implements the IBFCacheable interface implements both anEnterBFCache method and an ExitBFCache method, neither of which takesany parameters.

When EnterBFCache( ) is called or invoked, operations performed by theplug-in that are not to happen on a suspended tab are stopped, such aswebcam use, audio playback, and so forth. If all operations are stoppedin such a way that they can be resumed in a graceful or user-friendlymanner (e.g., audio playback resumed at the location it was at when theWeb content was suspended), the plug-in returns an indication of success(e.g., an OK value or code). However, if operations are stopped in sucha way that they cannot be resumed in a graceful or user-friendly manner,then the plug-in returns an indication of failure (e.g., a FAIL value orcode). These operations performed by the plug-in are still stopped evenif they cannot be resumed in a graceful or user-friendly manner.

When ExitBFCache( ) is called or invoked, suspended operations of theplug-in are to resume. It should be noted that there is no guaranteethat ExitBFCache will ever be called (e.g., the UI tab could be closed).A tab is said to be “suspended” or “in BFCache” between the timeEnterBFCache returns a success code and the time ExitBFCache is called.

Another element that may be included or implemented in Web content isreferences to Web content in other tabs. When suspending Web content,the Web content suspension module 128 can break those references, suchas by replacing those references to objects or elements of the suspendedWeb content with references to objects or elements generated by the Webcontent suspension module 128 (and/or Web application 106), andmaintaining a record of those replacements. When reactivating Webcontent, the Web content reactivation module 130 uses the record of thevarious replacements, re-establishing the broken references by returningthe references to the objects or elements generated by the Web contentsuspension module 128 to objects or elements in the reactivated Webcontent.

In one or more embodiments, when suspending Web content all of theelements of the Web content discussed above are suspended. For example,all audio and/or video playback is paused, all animations and/ortransitions are paused, messages to all Web worker threads are paused,and so forth. Alternatively, when suspending Web content some of theelements of the Web content are suspended while others are not. Forexample, audio and/or video playback may be paused, animations and/ortransitions may be paused, but messages from the message pump or messagedispatcher of the Web application 106 to the Web content are notstopped.

FIG. 6 is a flowchart illustrating an example process 600 for suspendingWeb content in accordance with one or more embodiments. Process 600 iscarried out by a module of a device, such as Web content suspensionmodule 128 of FIG. 1, and can be implemented in software, firmware,hardware, or combinations thereof. Process 600 is shown as a set of actsand is not limited to the order shown for performing the operations ofthe various acts. Process 600 is an example process for suspending Webcontent; additional discussions of suspending Web content are includedherein with reference to different figures.

In process 600, Web content that is to be suspended is identified (act602). Web content that is to be suspended can be identified in variousmanners, such as Web content that is hosted in a hidden tab associatedwith a user interface tab as discussed above. The Web content that is tobe suspended can alternatively be identified in other manners, such asin response to the Web application hosting (or including a tab hosting)the Web content no longer being the visible application (e.g., being anapplication that is minimized, suspended, etc.), in response to a changein which UI tab is displayed by the Web application, the Web applicationdetermining for other reasons that the Web content is to be suspended,and so forth.

Each element of the Web content that is to be suspended is identified(act 604). Web content can include various different elements, such asaudio/video content, asynchronous requests, scripts, and so forth asdiscussed above.

Each element of the Web content is addressed based on the type ofelement (act 606). Addressing the element for suspension of the Webcontent refers to taking any appropriate actions so that the Web contentthat includes the element can be suspended. Various actions can be takenas discussed above, such as pausing audio/video content, holding repliesto asynchronous requests, and so forth as discussed above.

A check can then be made as to whether the Web content is to bereactivated (act 608). The Web content can be reactivated in response toany of a variety of different events, such as the tab hosting the Webcontent being switched to being a visible tab, the Web applicationhosting (or including a tab hosting) the Web content becoming thevisible application, in response to a change in which UI tab isdisplayed by the Web application, and so forth.

If the Web content is to be reactivated, then the Web content isreactivated including addressing each element in the suspended Webcontent (act 610). The Web content can include multiple elements asdiscussed above. Addressing the element for reactivation of the Webcontent refers to taking any appropriate actions so that the Web contentthat includes the element can be reactivated. Various actions can betaken as discussed above, such as resuming audio/video content playback,providing queued replies to asynchronous requests to the Web content,and so forth as discussed above.

Suspension Compatibility

Returning to FIG. 1, the Web content suspension module 128 can suspendthe Web content. The Web content has various different characteristics,such as including various different features, having been written usingvarious conventions or techniques, and so forth. The Web contentsuspension module 128 uses these different characteristics of the Webcontent to determine whether it is desirable to suspend the Web orwhether another action is to be taken (e.g., the Web content unloaded).Whether it is desirable to suspend the Web content can vary fordifferent Web applications, and is based on various factors such aswhether suspending the Web content may result in undesirable behavior ofthe Web content or Web application, whether suspending the Web contentwould significantly improve performance (e.g., improve performance by atleast a threshold amount) over taking another action, and so forth. TheWeb content suspension module 128 uses these characteristics todetermine whether Web content can be suspended. This determination ismade independent of the manner in which the Web content is suspended,and independent of the scenario in which the Web content is suspended.For example, the suspending of the Web content may be suspending of ahidden tab as discussed above, suspension of all of the tabs includingWeb content for a UI tab, suspension when a Web application is minimizedor otherwise not displayed on a computing device, suspension by beingwritten to another storage device or memory, and so forth.

The suspension of some Web content can yield undesirable results,referred to as the Web content having a compatibility issue with beingsuspended. Undesirable results refer to, for example, the Web contentnot behaving as expected or not providing a desired user experience whensuspended and/or reactivated, the Web application not behaving asexpected or not providing a desired user experience when the Web contentis suspended and/or reactivated, another device or module (e.g., aremote server) not behaving as expected or not providing a desired userexperience when the Web content is suspended and/or reactivated, and soforth.

The Web content suspension module 128 uses a set of candidacy rules thatrefer to various characteristics of Web content to determine which Webcontent has a compatibility issue with being suspended. Web content hasa compatibility issue with being suspended if the Web content isexpected to (e.g., has at least a threshold probability or likelihoodof) yielding undesirable results if suspended. The Web content may notactually yield undesirable results if suspended, but is nonethelessdeemed to have a compatibility issue with being suspended.

Various different candidacy rules are discussed herein. It should benoted that these candidacy rules are examples, and that additionalcandidacy rules can be applied by the Web content suspension module 128.Furthermore, it should be noted that not all of the candidacy rulesdiscussed herein need be used by the Web content suspension module 128.In one or more embodiments, Web content is suspended if all of thecandidacy rules that are used by the Web content suspension module 128indicate that there is not a compatibility issue with suspending the Webcontent. If at least one of the candidacy rules used by the Web contentsuspension module 128 indicates that there is a compatibility issue withsuspending Web content, then the Web content is not suspended.

The Web content suspension module 128 can determine whether particularWeb content has a compatibility issue with being suspended at one ormore of a variety of different times. For example, one or more of thecandidacy rules can be evaluated in response to the Web content beingloaded and displayed by the Web application, while the Web content isbeing displayed by the Web application, in response to a determinationthat the Web content is to be suspended or unloaded, and so forth.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include an all frames rule. Web contentcan include multiple frames or other structures that host additional Webcontent, and each such frame or other structure can include additionalframes or structures that host further Web content, and so forth. Forexample, a Web page can include an HTML iframe element that hosts anadditional Web page. The all frames rule indicates that, in order forthe candidacy rules for Web content to indicate there is nocompatibility issue with being suspended, the candidacy rules for anyadditional Web content hosted in a frame or other structure of the Webcontent are to indicate there is no compatibility issue with suchadditional Web content being suspended. In other words, if there is acompatibility issue with the Web content hosted in any other frame orstructure of particular Web content, then there is a compatibility issuewith the particular Web content being suspended.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a network zone rule. The networkzone rule identifies one or more networks or types of networks via whichthe Web content source is accessed for which there is (or alternativelyis not) a compatibility issue with the Web content being suspended. Thenetwork zone rule allows Web content obtained from a Web content sourcethat can be accessed quickly (e.g., one or more files on the samecomputing device as the Web application, one or more files stored on alocal intranet, a network accessed via a Wi-Fi or wired networkconnection, etc.) to have a compatibility issue with being suspended,and Web content obtained from a Web content source that is accessed moreslowly (e.g., the Internet, a network accessed via a 3G (thirdgeneration) or 4G LTE (fourth generation Long Term Evolution) networktype rather than a Wi-Fi or wired network connection), to not have acompatibility issue with being suspended. Thus, resources need not beexpended to suspend Web content that can be obtained relatively quickly.In one or more embodiments, the network zone rule indicates that Webcontent obtained from a Web content source via the Internet has nocompatibility issue with being suspended, but that Web content obtainedfrom other Web content sources has a compatibility issue with beingsuspended.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a compatibility record rule. Acompatibility record can be maintained that identifies Web content thatis compatible with being suspended and/or Web content that is notcompatible with being suspended. Web content can be identified in thecompatibility record as being compatible with or not compatible withbeing suspended in response to any of a variety of different actions,such as being added to the record by an administrator or Web contentdeveloper, being added to the record by a user of the Web application,being added to the record by another component or module, and so forth.In one or more embodiments an API is exposed (e.g., by the Webapplication or another module of the operating system on the devicerunning the Web application) that can be invoked by the Web content inorder for the Web content itself to indicate whether the Web content iscompatible with being suspended. For example, a “compatible” method canbe exposed that the Web content can invoke to indicate that the Webcontent is compatible with being suspended, and an “incompatible” methodcan be exposed that the Web content can invoke to indicate that the Webcontent is not compatible with being suspended. By way of anotherexample, a method can be exposed by the API that can be invoked by theWeb content with the Web content passing a parameter value to the APIindicating whether the Web content is identifying itself as beingcompatible or incompatible with being suspended.

It should be noted that the compatibility record rule can override allother rules in the set of candidacy rules. For example, if thecompatibility record rule indicates that particular Web content iscompatible with being suspended, then the Web content is deemed to becompatible with being suspended regardless of whether any othercandidacy rules indicate the Web content is compatible with or notcompatible with being suspended. Similarly, if the compatibility recordrule indicates that particular Web content is not compatible with beingsuspended, then the Web content is deemed to be not compatible withbeing suspended regardless of whether any other candidacy rules indicatethe Web content is compatible with or not compatible with beingsuspended.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a history record rule. The Webapplication can maintain a history record, also referred to as a travellog, identifying Web content that has been accessed by the Webapplication. The history record can be, for example, a list of Webcontent identifiers (e.g., Uniform Resource Locators (URLs)) inchronological order of the Web content being accessed by the Webapplication. The history record rule indicates that there is acompatibility issue with suspending the Web content if the Web contentis not identified in the history record, and that there is not acompatibility issue with suspending the Web content if the Web contentis identified in the history record. Web content may not be identifiedin the history record for a variety of different reasons, such as whenloading particular Web content results in being automatically forwardedor re-directed to different Web content. The Web content that forwardedor re-directed the Web application to different Web content need not bemaintained in the history record, and thus need not be suspended becausea user would typically not desire to return to that Web content (sincereturning to that Web content would result in again being forwarded orre-directed to the different Web content.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a refresh rule. Web content canbe implemented with refresh functionality, allowing the Web content tobe automatically refreshed (e.g., re-obtained from the Web contentsource) at regular or irregular intervals. For example, Web contentdisplaying current sports scores may be automatically refreshed every 30or 60 seconds. The refresh capability can be implemented in a variety ofdifferent manners. For example, a Web page can include an HTML metaelement that hosts an additional Web page. The refresh rule indicatesthat there is a compatibility issue with suspending Web content thatimplements refresh functionality, and that there is not a compatibilityissue with suspending Web content that does not implement refreshfunctionality. Web content implementing refresh functionality wouldtypically result in previous versions of the Web content (e.g., eachtime the Web content is refreshed) that do not need to be suspended asthey may include data that is no longer accurate. Thus, Web contentimplementing refresh functionality is not suspended to avoid suspendingWeb content including data that is no longer accurate.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a before unload event handlerrule. Web content can register to receive a before unload event justprior to the Web application navigating away from the Web content. Thebefore unload event can be used by the Web content in different manners,such as to present a UI to the user notifying the user that he or she isabout to navigate away from the Web content (e.g., and receiveconfirmation from the user that he or she desires to navigate away fromthe Web content), save various information, and so forth. The beforeunload event handler rule indicates that there is a compatibility issuewith suspending Web content that is registered to receive the beforeunload event, and that there is not a compatibility issue withsuspending Web content that is not registered to receive the beforeunload event.

Alternatively, the before unload event handler rule can indicate thatthere is a compatibility issue with suspending Web content that isregistered to receive the before unload event and would present a UIwhen handling the before unload event, and that there is not acompatibility issue with suspending Web content that is not registeredto receive the before unload event or is registered to receive thebefore unload event but would not present a UI when handling the beforeunload event. Whether the Web content would present a UI when handlingthe before unload event can be determined in different manners. In oneor more embodiments, a JavaScript or other script language executionengine (e.g., of the Web application or operating system) analyzes theWeb content script that handles the before unload event and determineswhether that script would present a UI. This analysis can be performedin different manners, such as based on whether the script returns avalue (e.g., to the JavaScript or other script language executionengine) to be presented in a UI dialog.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include an unload event handler rule. Webcontent can register to receive an unload event just prior to the Webapplication navigating away from the Web content. The unload eventhandler rule indicates that there is a compatibility issue withsuspending Web content that is registered to receive the unload event,and that there is not a compatibility issue with suspending Web contentthat is not registered to receive the unload event.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a database rule. As discussedabove, various different types of database transactions can be performedby Web content, such as Indexed Database transactions. The databasetransactions can include multiple requests that are performed by anothermodule or device, such as requests to add database entries, changedatabase entries remove database entries, delete tables, and so forth.The database transaction is deemed to be completed if all the requestsincluded in the transaction are successfully performed. If one or morerequests in the transaction are not successfully performed then thetransaction is deemed to be not completed (and any requests that weresuccessfully performed are rolled back). The database rule indicatesthat there is a compatibility issue with suspending Web content havingone or more database transactions that are not completed, and that thereis not a compatibility issue with suspending Web content having databasetransactions that are completed.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a secure communications protocolrule. Web content can employ various different secure communicationsprotocols to communicate with other devices, such as the HyperTextTransfer Protocol Secure (HTTPS) communications protocol. The securecommunications protocol rule indicates that there is a compatibilityissue with suspending Web content that communicates with one or moreother devices via a secure communications protocol, and that there isnot a compatibility issue with suspending Web content that does notcommunicate with other devices using a secure communications protocol.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a content loaded rule. It takesthe Web application some duration of time (e.g., a few hundredmilliseconds to a few seconds) to load Web content. The completion ofloading Web content can be determined in different manners, such as byreceipt of an onload event or pageshow event from an event handler ofthe operating system. The content loaded rule indicates that there is acompatibility issue with suspending Web content that has not completedloading, and that there is not a compatibility issue with suspending Webcontent that has completed loading. Thus, rather than suspending Webcontent that has not completed loading, Web content that has notcompleted loading is unloaded.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a notification rule. Variousnotifications can be displayed by the Web application for Web content,each notification notifying a user of some status or request. Forexample, a notification can indicate that an action has occurred (e.g.,a file download requested by the Web content has occurred, a file thathas been requested to be downloaded by the Web content has been blockedby the Web application, etc.), can request a user input (e.g., a userinput indicating whether a password for the Web content is to be saved,a user input indicating whether a file download requested by the Webcontent is to proceed, etc.). The notification rule indicates that thereis a compatibility issue with suspending Web content if there is anotification being displayed by the Web application for the Web content,and that there is not a compatibility issue with suspending Web contentif there is no notification being displayed by the Web application forthe Web content.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include an open communication channelrule. Web content can communicate with other devices, such as one ormore servers via the Internet, using a variety of different types ofcommunications channels. While some communications channels can beasynchronous, others are not asynchronous and are a persistent two-waycommunication channel that can be opened between the Web content and theother device. Various different protocols can be used to implement suchpersistent communication channels, such as the WebSocket protocol. Theopen communication channel rule indicates that there is a compatibilityissue with suspending Web content having an open communication channelwith another device (e.g., an open WebSocket connection), and that thereis not a compatibility issue with suspending Web content that does nothave an open communication channel with another device (e.g., an openWebSocket connection). By determining that there is a compatibilityissue with suspending Web content having an open communication channelwith another device, situations can be avoided in which the other deviceis waiting for and expecting a response from the Web content but willnot receive the response due to the Web content being suspended.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a Web workers rule. Web contentcan include or implement Web worker threads as discussed above. The Webworkers rule indicates that there is a compatibility issue withsuspending Web content that includes or implements at least one Webworker thread, and that there is not a compatibility issue withsuspending Web content that does not include or implement any Web workerthreads.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a plug-in rule. Web content caninclude or implement a plug-in that adds a feature to the Webapplication as discussed above. The plug-in rule indicates that there isa compatibility issue with suspending Web content that includes orimplements at least one plug-in, and that there is not a compatibilityissue with suspending Web content that does not include or implement anyplug-ins.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a helper objects rule. Variousdifferent toolbars or Web application (e.g., Web browser) helper objectscan be invoked or otherwise accessed by Web content. These toolbars orhelper objects can be intertwined with the Web content, such as bycommunicating with the Web content, holding references to objects in theWeb content, and so forth. The helper objects rule indicates that thereis a compatibility issue with suspending Web content that accesses atleast one toolbar and/or at least one Web application helper object, andthat there is not a compatibility issue with suspending Web content thatdoes not access any toolbars and any Web application helper objects. Bydetermining that there is a compatibility issue with suspending Webcontent that accesses at least one toolbar and/or at least one Webapplication helper object, situations can be avoided in which a toolbaror helper object is waiting for and expecting a response from the Webcontent but will not receive the response due to the Web content beingsuspended.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a developer tool rule. Developertools refer to various modules or components that are implemented orenabled by Web content to facilitate development of Web content and/orWeb applications. The developer tool rule indicates that there is acompatibility issue with suspending Web content that implements orenables at least one developer tool, and that there is not acompatibility issue with suspending Web content that does not implementor enable any developer tools.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a protected media rule. Webcontent can include or access media content (e.g., songs, music,electronic publications, etc.) that is the subject of any of a varietyof digital rights management (DRM) mechanisms. Which media content isthe subject of a DRM mechanism can be determined in a variety ofmanners, such as based on the manner in which the media content isaccessed (e.g., using HTML Encrypted Media Extensions), based on thenaming convention of the file including the media content, based onmetadata associated with the media content, based on operating systemcomponents or modules accessed to decrypt the media content, and soforth. The protected media rule indicates that there is a compatibilityissue with suspending Web content that includes or accesses mediacontent that is the subject of a DRM mechanism, and that there is not acompatibility issue with suspending Web content that is not the subjectof a DRM mechanism.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a referenced tab rule. The Webcontent can be hosted in various different virtual tabs associated witha UI tab. Situations can arise where the Web content hosted in one tabreferences the Web content hosted in another tab (e.g., in a virtual tabassociated with the same UI tab or a different UI tab). The referencedtab rule indicates that there is a compatibility issue with suspendingWeb content that references Web content hosted in another tab, and thatthere is not a compatibility issue with suspending Web content that doesnot reference Web content hosted in another tab.

The candidacy rules to determine which Web content has a compatibilityissue with being suspended can include a media projection rule. Webcontent can project or otherwise transmit media included or identifiedin the Web content to another device. For example, a video identified ina Web page can be streamed by the Web content to a television that isseparate from the device implementing the Web application. Web contentcan project or otherwise transmit media using a variety of differentmechanisms, such as using the Digital Living Network Alliance (DLNA)guidelines. The media projection rule indicates that there is acompatibility issue with suspending Web content that projects orotherwise transmits media to another device, and that there is not acompatibility issue with suspending Web content that does not project orotherwise transmit media to another device.

FIG. 7 is a flowchart illustrating an example process 700 fordetermining whether to suspend Web content in accordance with one ormore embodiments. Process 700 is carried out by a module of a device,such as Web content suspension module 128 of FIG. 1, and can beimplemented in software, firmware, hardware, or combinations thereof.Process 700 is shown as a set of acts and is not limited to the ordershown for performing the operations of the various acts. Process 700 isan example process for determining whether to suspend Web content;additional discussions of determining whether to suspend Web content areincluded herein with reference to different figures.

In process 700, a set of candidacy rules is identified (act 702). Thecandidacy rules indicate various characteristics of Web content having acompatibility issue with being suspended. Web content has acompatibility issue with being suspended if the Web content is expectedto yield (e.g., has at least a threshold probability or likelihood ofyielding) undesirable results if suspended as discussed above.

A check is made as to whether the Web content has a compatibility issuewith being suspended (act 704). This check is made based on the set ofcandidacy rules as discussed above.

If the Web content does not have a compatibility issue with beingsuspended, then the Web content is suspended (act 706). However, if theWeb content does have a compatibility issue with being suspended, thenthe Web content is unloaded (or alternatively another action is taken)rather than being suspended (act 708).

Web Content Lifetime Management

Returning to FIG. 1, the Web content lifetime management module 132 usesa set of various lifetime criteria to determine when suspended Webcontent is to no longer be maintained. The Web content lifetimemanagement module 132 uses various different lifetime criteria todetermine when suspended Web content is to no longer be maintained. Thisdetermination is made independent of the manner in which the Web contentis suspended, and independent of the scenario in which the Web contentis suspended. For example, the suspended Web content may be Web contenthosted in a hidden tab as discussed above, Web content hosted in a tabincluding Web content for a UI tab, Web content hosted by a Webapplication that is minimized or otherwise not displayed on a computingdevice, Web content written to another storage device or memory, and soforth.

In one or more embodiments, the Web content lifetime management module132 manages, for one or more UI tabs 110, how long an associated hiddentab 114 and/or an empty tab 116 is maintained, as well as when to createa new empty tab 116.

Web content that is to no longer be maintained is disposed of Disposingof Web content refers to deleting or otherwise reclaiming storage spaceused by the Web content. The manner in which the Web content is disposedof can vary based on how the Web content is stored. For example, if theWeb content is stored having been written to another storage device ormemory, then the Web content can be disposed of by being deleted. By wayof another example, if the Web content is hosted in a virtual tabassociated with a UI tab, then the Web content can be disposed of bydeleting or recycling the virtual tab. Deleting a virtual tab refers tounloading the Web content from the virtual tab and removing referencesto the virtual tab. Recycling a virtual tab refers to unloading the Webcontent from the virtual tab and having the virtual tab switching module122 switch the virtual tab to being an empty tab 116.

Various different lifetime criteria indicating when Web content is to nolonger be maintained (is to be disposed of) are discussed herein. Thelifetime criteria can take into account various factors, such as theamount of device resources (e.g., memory) the Web content is consuming,whether the Web content is likely (e.g., at least a thresholdprobability) of being displayed again by the Web application, and soforth. It should be noted that these lifetime criteria are examples, andthat additional criteria can be applied by the Web content lifetimemanagement module 132. Furthermore, it should be noted that not all ofthe criteria discussed herein need be used by the Web content lifetimemanagement module 132. In one or more embodiments, Web content isdisposed of if at least one of the criteria indicates that Web contentis to be disposed of.

The lifetime criteria can include a number of tabs criteria. The Webcontent lifetime management module 132 can allow only a threshold amountof Web content (e.g., a threshold number of hidden tabs 114) to beassociated with the UI tab 110 at any given time. This threshold numbercan be a fixed number (e.g., one). Alternatively, this threshold numbercan be a relative number, e.g., varying based on resource (e.g., memory)availability in the computing device 100, varying based on how manyprograms in addition to the Web application 106 are running on thecomputing device 100, based on the type of Web content (e.g., thethreshold number can be increased for types of Web content that a useris deemed to be more likely (e.g., greater than a threshold likelihood)to be navigating back and/or forward through than types of Web contentthat a user is deemed to be less likely (e.g., less than a thresholdlikelihood) to be navigating back and/or forward through), and so forth.For example, the module 132 may allow any amount of Web content (e.g.,any number of hidden tabs 114) until at least a threshold amount ofmemory in the computing device (e.g., 50%) is allocated to the Webapplication 106. By way of another example, the module 132 may allow alarger amount of Web content (e.g., a larger number of hidden tabs, suchas five) when the type of Web content is news articles (e.g., that auser is more likely to navigate back and forth through), and a smalleramount of Web content (e.g., a smaller number of hidden tabs, such aszero or one) when the type of Web content is content providing access toa social networking or email Web site.

The lifetime criteria can include an application terminated criteria. AWeb application can be terminated in various situations, such as inresponse to a user request to close the Web application, in response toa process lifetime manager (PLM) component or module of the computingdevice running the Web application terminating the Web application dueto various termination criteria being satisfied, and so forth. If theWeb application is terminated, then the Web content in all of the UItabs of the Web application is disposed of (including virtual tabsand/or other suspended Web content).

The lifetime criteria can include an inactive application criteria. TheWeb application may not be the active application (may be an inactiveapplication), such as being an application that is minimized, suspended,and so forth. If the Web application is an inactive application for atleast a threshold amount of time (e.g., sixty minutes, although otherthreshold amounts of time can alternatively be used), then the Webcontent in all of the UI tabs of the Web application (including virtualtabs and/or other suspended Web content) is disposed of. The Web contentcan be disposed of in response to the threshold amount of time elapsing,or alternatively at other times (e.g., in response to the Webapplication becoming an active application).

The lifetime criteria can include an active tab criteria. In situationswhere a user switches from one UI tab to another UI tab, it isoftentimes unlikely that the user will switch back to the previous UItab and then navigate back (e.g., through his or her history of Webcontent). Thus, if the UI tab is not currently active (is not the UI tabcurrently being displayed) for at least a threshold amount of time(e.g., one minute, although other threshold amounts of time canalternatively be used), Web content in virtual tabs associated with theUI tab that is not currently active is disposed of.

The lifetime criteria can include a tab closed criteria. A UI tab can beclosed in various situations, such as in response to a user request toclose the UI tab, in response to the Web application determining thatthe UI tab is to be closed due to various criteria being satisfied(e.g., a threshold number of UI tabs being open), and so forth. If theUI tab is closed, then all of the Web content displayed in the UI tab(including Web content hosted in virtual tabs associated with the UItab, if any) is disposed of.

The lifetime criteria can include a crash recovery criteria. Crashrecovery can be performed in a computing device in response to variousproblems being detected in the computing device and/or the Webapplication. Crash recovery refers to saving various state or otherinformation regarding the computing device and/or the Web application,as well as optionally restarting the computing device and/or Webapplication. In performing crash recovery, Web content displayed in theUI tab (including Web content hosted in virtual tabs associated with theUI tab, if any) is disposed of.

The lifetime criteria can include a new window criteria. Situations canarise where a UI tab of a Web application is changed to a new window(e.g., the UI tab in a new instance of the Web application). This changecan occur in response to various events, such as a user request (e.g.,by dragging and dropping the UI tab to a new location), a request fromanother component or module, and so forth. If the UI tab is changed to anew window, the virtual tabs associated with the UI tab are disposed of.The virtual tabs can be deleted, or alternatively recycled (becomingempty tabs). Alternatively, the virtual tabs associated with the UI tabthat is changed to a new window can remain associated with the UI taband need not be disposed of.

The lifetime criteria can include an active page criteria. Situationscan arise in which a threshold amount of time (e.g., one hour, althoughdifferent threshold amounts of time can alternatively be used) elapsessince particular Web content was displayed (e.g., since a particularvirtual tab was last a visible tab). After the threshold amount of timeelapses, it is unlikely that the user will want to navigate back to theWeb content, and if he or she does navigate back after the thresholdamount of time elapses it is more desirable to reload the Web content toensure the Web content is current. If Web content has not been displayed(e.g., a tab has not been the visible tab) for at least the thresholdamount of time, the Web content is disposed of. The Web content can bedisposed of in response to the threshold amount of time elapsing, oralternatively at other times.

The active page criteria can optionally include a threshold use time,indicating a threshold amount of time that is to elapse until the Webcontent can be disposed of. For example, the threshold amount of timemay be three or five seconds. The Web content is not disposed of untilthe Web content has been loaded (e.g., hosted in a tab) for at least thethreshold use amount of time.

When disposing of Web content, which Web content is disposed of can bedetermined in various manners. For example, the particular lifetimecriteria may indicate which Web content is disposed of (e.g., all of theWeb content displayed in a UI tab). By way of another example,particular Web content to be disposed of can be selected, such asdisposing of the least recently displayed Web content, disposing of thelargest Web content (the Web content using the largest amount of memoryof the computing device 100), and so forth. How much Web content (e.g.,how many virtual tabs hosting Web content) is disposed of can bedetermined in different manners, such as disposing of a sufficientamount of Web content so that lifetime criteria no longer indicates thatWeb content is to be disposed of.

In addition to determining when to dispose of Web content, the Webcontent lifetime management module 132 can also determine when togenerate a new empty virtual tab. In one or more embodiments, the Webcontent lifetime management module 132 has the tab generation module 124generate a new empty tab if there are less than a threshold number ofempty tabs available for use by one or more UI tabs. This thresholdnumber can be a fixed number (e.g., one). Alternatively, this thresholdnumber can be a relative number, e.g., varying based on resource (e.g.,memory) availability in the computing device 100, varying based on howmany programs in addition to the Web application 106 are running on thecomputing device 100, and so forth.

FIG. 8 is a flowchart illustrating an example process 800 for disposingof Web content in accordance with one or more embodiments. Process 800is carried out by a module of a device, such as Web content suspensionmodule 128 of FIG. 1, and can be implemented in software, firmware,hardware, or combinations thereof. Process 800 is shown as a set of actsand is not limited to the order shown for performing the operations ofthe various acts. Process 800 is an example process for disposing of Webcontent; additional discussions of disposing of Web content are includedherein with reference to different figures.

In process 800, Web content that has been suspended is identified (act802). A check is made as to whether the suspended Web content can bedisposed of (act 804). This check is made based on various differentlifetime criteria as discussed above.

If the Web content can be disposed of, then the Web content is disposedof (act 806). Disposing of the Web content can take various forms asdiscussed above, such as deleting a tab hosting the Web content and/orrecycling a tab hosting the Web content. However, if the Web contentcannot be disposed of, then the Web content is maintained (act 808).

Example System

Although particular functionality is discussed herein with reference toparticular modules and applications, it should be noted that thefunctionality of individual modules and/or applications discussed hereincan be separated into multiple modules and/or applications, and alsonoted that at least some functionality of multiple modules and/orapplications can be combined into a single module and/or application.Additionally, a particular module and/or application discussed herein asperforming an action includes that particular module and/or applicationitself performing the action, or alternatively that particular moduleand/or application invoking or otherwise accessing another component,module, or application that performs the action (or performs the actionin conjunction with that particular module and/or application). Thus, aparticular module and/or application performing an action includes thatparticular module and/or applications itself performing the action, aswell as another module and/or applications invoked (or otherwiseaccessed) by that particular module and/or applications performing theaction.

FIG. 9 illustrates an example system generally at 900 that includes anexample computing device 902 that is representative of one or moresystems and/or devices that may implement the various techniquesdescribed herein. The computing device 902 may be, for example, a serverof a service provider, a device associated with a client (e.g., a clientdevice), an on-chip system, and/or any other suitable computing deviceor computing system.

The example computing device 902 as illustrated includes a processingsystem 904, one or more computer-readable media 906, and one or more I/OInterfaces 908 that are communicatively coupled, one to another.Although not shown, the computing device 902 may further include asystem bus or other data and command transfer system that couples thevarious components, one to another. A system bus can include any one orcombination of different bus structures, such as a memory bus or memorycontroller, a peripheral bus, a universal serial bus, and/or a processoror local bus that utilizes any of a variety of bus architectures. Avariety of other examples are also contemplated, such as control anddata lines.

The processing system 904 is representative of functionality to performone or more operations using hardware. Accordingly, the processingsystem 904 is illustrated as including hardware elements 910 that may beconfigured as processors, functional blocks, and so forth. This mayinclude implementation in hardware as an application specific integratedcircuit or other logic device formed using one or more semiconductors.The hardware elements 910 are not limited by the materials from whichthey are formed or the processing mechanisms employed therein. Forexample, processors may be comprised of semiconductor(s) and/ortransistors (e.g., electronic integrated circuits (ICs)). In such acontext, processor-executable instructions may beelectronically-executable instructions.

The computer-readable media 906 is illustrated as includingmemory/storage 912. The memory/storage 912 represents memory/storagecapacity associated with one or more computer-readable media. Thememory/storage 912 may include volatile media (such as random accessmemory (RAM)) and/or nonvolatile media (such as read only memory (ROM),Flash memory, optical disks, magnetic disks, and so forth). Thememory/storage 912 may include fixed media (e.g., RAM, ROM, a fixed harddrive, and so on) as well as removable media (e.g., Flash memory, aremovable hard drive, an optical disc, and so forth). Thecomputer-readable media 906 may be configured in a variety of other waysas further described below.

Input/output interface(s) 908 are representative of functionality toallow a user to enter commands and information to computing device 902,and also allow information to be presented to the user and/or othercomponents or devices using various input/output devices. Examples ofinput devices include a keyboard, a cursor control device (e.g., amouse), a microphone (e.g., for voice inputs), a scanner, touchfunctionality (e.g., capacitive or other sensors that are configured todetect physical touch), a camera (e.g., which may employ visible ornon-visible wavelengths such as infrared frequencies to detect movementthat does not involve touch as gestures), and so forth. Examples ofoutput devices include a display device (e.g., a monitor or projector),speakers, a printer, a network card, tactile-response device, and soforth. Thus, the computing device 902 may be configured in a variety ofways as further described below to support user interaction.

Computing device 902 also includes a Web application 914. Webapplication 914 is a Web application as discussed above, such as Webapplication 106 of FIG. 1.

Various techniques may be described herein in the general context ofsoftware, hardware elements, or program modules. Generally, such modulesinclude routines, programs, objects, elements, components, datastructures, and so forth that perform particular tasks or implementparticular abstract data types. The terms “module,” “functionality,” and“component” as used herein generally represent software, firmware,hardware, or a combination thereof. The features of the techniquesdescribed herein are platform-independent, meaning that the techniquesmay be implemented on a variety of computing platforms having a varietyof processors.

An implementation of the described modules and techniques may be storedon or transmitted across some form of computer-readable media. Thecomputer-readable media may include a variety of media that may beaccessed by the computing device 902. By way of example, and notlimitation, computer-readable media may include “computer-readablestorage media” and “computer-readable signal media.”

“Computer-readable storage media” refers to media and/or devices thatenable persistent storage of information and/or storage that istangible, in contrast to mere signal transmission, carrier waves, orsignals per se. Thus, computer-readable storage media refers tonon-signal bearing media. The computer-readable storage media includeshardware such as volatile and non-volatile, removable and non-removablemedia and/or storage devices implemented in a method or technologysuitable for storage of information such as computer readableinstructions, data structures, program modules, logic elements/circuits,or other data. Examples of computer-readable storage media may include,but are not limited to, RAM, ROM, EEPROM, flash memory or other memorytechnology, CD-ROM, digital versatile disks (DVD) or other opticalstorage, hard disks, magnetic cassettes, magnetic tape, magnetic diskstorage or other magnetic storage devices, or other storage device,tangible media, or article of manufacture suitable to store the desiredinformation and which may be accessed by a computer.

“Computer-readable signal media” refers to a signal-bearing medium thatis configured to transmit instructions to the hardware of the computingdevice 902, such as via a network. Signal media typically may embodycomputer readable instructions, data structures, program modules, orother data in a modulated data signal, such as carrier waves, datasignals, or other transport mechanism. Signal media also include anyinformation delivery media. The term “modulated data signal” means asignal that has one or more of its characteristics set or changed insuch a manner as to encode information in the signal. By way of example,and not limitation, communication media include wired media such as awired network or direct-wired connection, and wireless media such asacoustic, RF, infrared, and other wireless media.

As previously described, hardware elements 910 and computer-readablemedia 906 are representative of instructions, modules, programmabledevice logic and/or fixed device logic implemented in a hardware formthat may be employed in some embodiments to implement at least someaspects of the techniques described herein. Hardware elements mayinclude components of an integrated circuit or on-chip system, anapplication-specific integrated circuit (ASIC), a field-programmablegate array (FPGA), a complex programmable logic device (CPLD), and otherimplementations in silicon or other hardware devices. In this context, ahardware element may operate as a processing device that performsprogram tasks defined by instructions, modules, and/or logic embodied bythe hardware element as well as a hardware device utilized to storeinstructions for execution, e.g., the computer-readable storage mediadescribed previously.

Combinations of the foregoing may also be employed to implement varioustechniques and modules described herein. Accordingly, software,hardware, or program modules and other program modules may beimplemented as one or more instructions and/or logic embodied on someform of computer-readable storage media and/or by one or more hardwareelements 910. The computing device 902 may be configured to implementparticular instructions and/or functions corresponding to the softwareand/or hardware modules. Accordingly, implementation of modules as amodule that is executable by the computing device 902 as software may beachieved at least partially in hardware, e.g., through use ofcomputer-readable storage media and/or hardware elements 910 of theprocessing system. The instructions and/or functions may beexecutable/operable by one or more articles of manufacture (for example,one or more computing devices 902 and/or processing systems 904) toimplement techniques, modules, and examples described herein.

As further illustrated in FIG. 9, the example system 900 enablesubiquitous environments for a seamless user experience when runningapplications on a personal computer (PC), a television device, and/or amobile device. Services and applications run substantially similar inall three environments for a common user experience when transitioningfrom one device to the next while utilizing an application, playing avideo game, watching a video, and so on.

In the example system 900, multiple devices are interconnected through acentral computing device. The central computing device may be local tothe multiple devices or may be located remotely from the multipledevices. In one or more embodiments, the central computing device may bea cloud of one or more server computers that are connected to themultiple devices through a network, the Internet, or other datacommunication link.

In one or more embodiments, this interconnection architecture enablesfunctionality to be delivered across multiple devices to provide acommon and seamless experience to a user of the multiple devices. Eachof the multiple devices may have different physical requirements andcapabilities, and the central computing device uses a platform to enablethe delivery of an experience to the device that is both tailored to thedevice and yet common to all devices. In one or more embodiments, aclass of target devices is created and experiences are tailored to thegeneric class of devices. A class of devices may be defined by physicalfeatures, types of usage, or other common characteristics of thedevices.

In various implementations, the computing device 902 may assume avariety of different configurations, such as for computer 916, mobile918, and television 920 uses. Each of these configurations includesdevices that may have generally different constructs and capabilities,and thus the computing device 902 may be configured according to one ormore of the different device classes. For instance, the computing device902 may be implemented as the computer 916 class of a device thatincludes a personal computer, desktop computer, a multi-screen computer,laptop computer, netbook, and so on.

The computing device 902 may also be implemented as the mobile 918 classof device that includes mobile devices, such as a mobile phone, portablemusic player, portable gaming device, a tablet computer, a multi-screencomputer, and so on. The computing device 902 may also be implemented asthe television 920 class of device that includes devices having orconnected to generally larger screens in casual viewing environments.These devices include televisions, set-top boxes, gaming consoles, andso on.

The techniques described herein may be supported by these variousconfigurations of the computing device 902 and are not limited to thespecific examples of the techniques described herein. This functionalitymay also be implemented all or in part through use of a distributedsystem, such as over a “cloud” 922 via a platform 924 as describedbelow.

The cloud 922 includes and/or is representative of a platform 924 forresources 926. The platform 924 abstracts underlying functionality ofhardware (e.g., servers) and software resources of the cloud 922. Theresources 926 may include applications and/or data that can be utilizedwhile computer processing is executed on servers that are remote fromthe computing device 902. Resources 926 can also include servicesprovided over the Internet and/or through a subscriber network, such asa cellular or Wi-Fi network.

The platform 924 may abstract resources and functions to connect thecomputing device 902 with other computing devices. The platform 924 mayalso serve to abstract scaling of resources to provide a correspondinglevel of scale to encountered demand for the resources 926 that areimplemented via the platform 924. Accordingly, in an interconnecteddevice embodiment, implementation of functionality described herein maybe distributed throughout the system 900. For example, the functionalitymay be implemented in part on the computing device 902 as well as viathe platform 924 that abstracts the functionality of the cloud 922.

Although the subject matter has been described in language specific tostructural features and/or methodological acts, it is to be understoodthat the subject matter defined in the appended claims is notnecessarily limited to the specific features or acts described above.Rather, the specific features and acts described above are disclosed asexample forms of implementing the claims.

What is claimed is:
 1. A method comprising: displaying first Web contentin an associated visible tab of a user interface tab of a Webapplication, the user interface tab having simultaneously its ownvirtual tabs comprising the associated visible tab and an associatedempty tab that is not visible; receiving a request to change fromdisplaying the first Web content to displaying second Web content in theuser interface tab; loading the second Web content in the associatedempty tab of the user interface tab and converting the loaded empty tabinto a new associated visible tab of the user interface tab thatreplaces the old associated visible tab of the user interface tab;displaying, in response to the request, the second Web content in thenew associated visible tab of the user interface tab; converting the oldassociated visible tab to an associated hidden tab of the user interfacetab; keeping the first Web content in the associated hidden tab of theuser interface tab while displaying the second Web content in theassociated visible tab of the user interface tab; and suspending thefirst Web content.
 2. The method as recited in claim 1, the displayingincluding making the hidden tab become the visible tab and the visibletab become the hidden tab.
 3. The method as recited in claim 1, the userinterface tab having a number of associated hidden tabs determined by atype of the first Web content.
 4. The method as recited in claim 1, theassociated hidden tab having no displayed indication.
 5. The method asrecited in claim 1, the virtual tabs further comprising an associatedempty tab of the user interface tab.
 6. The method as recited in claim1, the Web application comprising a Web browser, the first Web contentcomprising a first Web page, and the second Web content comprising asecond Web page.
 7. The method as recited in claim 1, the suspending thefirst Web content including rolling back requests that were successfullyperformed.
 8. The method as recited in claim 1, the suspending the firstWeb content including delaying suspension for a threshold amount of timeto allow database transactions to complete.
 9. The method as recited inclaim 1, the suspending the first Web content including stoppingproviding to the first Web content some messages of when events occurand allowing providing to the first Web content other messages of whenevents occur.
 10. The method as recited in claim 1, the suspending thefirst Web content based on determining whether the suspending the firstWeb content would improve performance by at least a threshold amountover taking a different action.
 11. The method as recited in claim 1,the suspending the first Web content including: identifying a pluralityof elements of the first Web content; and suspending each identifiedelement based on a type of the identified element.
 12. The method asrecited in claim 1, the suspending the first Web content including:determining whether the first Web content can be disposed of; responsiveto the determination being that the first Web content can be disposedof, disposing of the first Web content; and responsive to thedetermination being that the first Web content cannot be disposed of,maintaining the first Web content.
 13. The method as recited in claim 1,the suspending the first Web content including unloading, rather thansuspending, the first Web page in response to a plug-in that adds afeature to the Web browser not being able to suspend itself.
 14. Themethod as recited in claim 13, the suspending the first Web contentincluding sending a request to the plug-in for the plug-in to suspenditself.
 15. The method as recited in claim 13, the suspending the firstWeb content including maintaining a record of references to the plug in.16. A computing device comprising: one or more processors; one or morecomputer-readable media having stored thereon multiple instructionsthat, when executed by the one or more processors, cause the one or moreprocessors to perform acts comprising: displaying first Web content inan associated visible tab of a user interface tab of a Web application,the user interface tab having simultaneously its own virtual tabscomprising the associated visible tab and an associated empty tab thatis not visible; receiving a request to change from displaying the firstWeb content to displaying second Web content in the user interface tab;loading the second Web content in the associated empty tab of the userinterface tab and converting the loaded empty tab into a new associatedvisible tab of the user interface tab that replaces the old associatedvisible tab of the user interface; displaying, in response to therequest, the second Web content in the new associated visible tab of theuser interface tab; converting the old associated visible tab to anassociated hidden tab of the user interface tab; keeping the first Webcontent in the associated hidden tab of the user interface tab whiledisplaying the second Web content in the new associated visible tab ofthe user interface tab; and suspending the first Web content.
 17. Thecomputing device as recited in claim 16, the displaying including makingthe hidden tab become the visible tab and the visible tab become thehidden tab.
 18. The computing device as recited in claim 16, the virtualtabs further comprising an associated empty tab of the user interfacetab.
 19. The computing device as recited in claim 16, the suspending thefirst Web content including delaying suspension for a threshold amountof time to allow database transactions to complete.
 20. A systemcomprising: one or more processors; a Web application implemented in acomputing device to display first Web content in an associated visibletab of a user interface tab of the Web application, the user interfacetab having simultaneously its own virtual tabs comprising the associatedvisible tab and an associated hidden empty tab that is not visible; auser input module implemented at least partially in hardware of thecomputing device to receive a request to change from displaying thefirst Web content to displaying second Web content in the user interfacetab; a tab generation module implemented in the computing device to loadthe second Web content in the associated empty tab of the user interfacetab of the user interface tab and convert the loaded empty tab into anew associated visible tab of the user interface tab that replaces theold associated visible tab of the user interface tab; a tab switchingmodule implemented in the computing device to display, in response tothe request, the second Web content in the new associated visible tab ofthe user interface tab and convert the old associated visible tab to anassociated hidden tab of the user interface tab; a Web content lifetimemanagement module implemented in the computing device to keep the firstWeb content in the associated hidden tab of the user interface tab whiledisplaying the second Web content in the new associated visible tab ofthe user interface tab; and a Web content suspension module implementedin the computing device to suspend the first Web content.